# -*- coding: cp1252 -*-
'''
Created on 25/08/2012

@author: Raphoka
'''
from Controle.Produto import Produto
from Persistencia.CriarTabelas import CriarTabelas
import MySQLdb as mdb

class ProdutoDao(object):
    '''
    classdocs
    '''


    def __init__(self):
        '''
        Constructor
        '''
        self.conexao = CriarTabelas() 
        self.__host = self.conexao._CriarTabelas__host
        self.__schema = self.conexao._CriarTabelas__schema
        self.__usuario = self.conexao._CriarTabelas__usuario
        self.__port = self.conexao._CriarTabelas__port
        self.__senha = self.conexao._CriarTabelas__senha
        
#===============================================================================
# Cadastrar Produto
#===============================================================================
    def cadastrarProduto(self, produto):
        nome = produto.getNome()
        quantidade = produto.getQuantidade()
        quantidadeMinima = produto.getQuantidadeMinima()
        vender = int(produto.getVender())
        precoVenda = produto.getPrecoVenda()
        
        if vender == True:
            sql1 = '''
INSERT INTO pro_produto (pro_nome, pro_quantidade, pro_quantidade_minima, pro_vender, pro_preco_venda) 
VALUES ('%s', '%s', '%s', '%s', '%s')
'''%(nome, quantidade, quantidadeMinima, vender, precoVenda)
        else:
            sql1 = '''
INSERT INTO pro_produto (pro_nome, pro_quantidade, pro_quantidade_minima, pro_vender, pro_preco_venda) 
VALUES ('%s', '%s', '%s', '%s', NULL)
'''%(nome, quantidade, quantidadeMinima, vender)

        comandosSQL = [sql1]
        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema)               
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False
        
#===============================================================================
# Editar produto
#===============================================================================
    def editarProduto(self, produto):
        Id = produto.getId()
        nome = produto.getNome()
        quantidade = produto.getQuantidade()
        quantidadeMinima = produto.getQuantidadeMinima()
        vender = int(produto.getVender())
        precoVenda = produto.getPrecoVenda()
        
        if vender == True:
            sql1 = '''
UPDATE pro_produto SET pro_nome = '%s', pro_quantidade = '%s', pro_quantidade_minima = '%s', 
pro_vender = '%s', pro_preco_venda = '%s' WHERE pro_id = '%s'
'''%(nome, quantidade, quantidadeMinima, vender, precoVenda, Id)
        else:
            sql1 = '''
UPDATE pro_produto SET pro_nome = '%s', pro_quantidade = '%s', pro_quantidade_minima = '%s', 
pro_vender = '%s', pro_preco_venda = NULL WHERE pro_id = '%s'
'''%(nome, quantidade, quantidadeMinima, vender, Id)

        comandosSQL = [sql1]
        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema)               
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False

#===============================================================================
# Pesquisar Lista de Produtos
#===============================================================================
    def pesquisarListaProdutos(self, pesquisarPor, palavraChave):
        palavraChave = "%"+palavraChave+"%"
        sql1 = '''
SELECT * FROM PRO_PRODUTO WHERE %s LIKE '%s' order by PRO_NOME
'''%(pesquisarPor, palavraChave)

        comandosSQL = [sql1]
        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema)
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)

            dados = cursor.fetchall()
            cursor.close()
            
            
            return self.__criarObjetos__(dados)
        except :
            
            return False
        
        
#===============================================================================
# Criar Objetos do Tipo Produto
#===============================================================================
    def __criarObjetos__(self, dados):
        produtos = []
        for i in dados:
            i = list(i)
            produto = Produto()
            produto.setId(i[0])
            produto.setNome(i[1])
            produto.setQuantidade(i[2])
            produto.setQuantidadeMinima(i[3])
            produto.setVender(bool(i[4]))
            if produto.getVender() == True:
                produto.setPrecoVenda(i[5])
            
            produtos.append(produto)
            
        return produtos

    
    def removerProduto(self, produto):
        sql1 = '''
DELETE FROM PRO_PRODUTO WHERE PRO_ID LIKE '%s'        
'''%(produto.getId())
        comandosSQL = [sql1]
        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema)                
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False

    
    def editarProdutos(self, listaProdutos):
        comandosSQL = []
        for i in listaProdutos:
            Id = i.getId()
            nome = i.getNome()
            quantidade = i.getQuantidade()
            quantidadeMinima = i.getQuantidadeMinima()
            vender = int(i.getVender())
            precoVenda = i.getPrecoVenda()
            
            if vender == True:
                sql1 = '''
UPDATE pro_produto SET pro_nome = '%s', pro_quantidade = '%s', pro_quantidade_minima = '%s', 
pro_vender = '%s', pro_preco_venda = '%s' WHERE pro_id = '%s'
'''%(nome, quantidade, quantidadeMinima, vender, precoVenda, Id)
            else:
                sql1 = '''
UPDATE pro_produto SET pro_nome = '%s', pro_quantidade = '%s', pro_quantidade_minima = '%s', 
pro_vender = '%s', pro_preco_venda = NULL WHERE pro_id = '%s'
'''%(nome, quantidade, quantidadeMinima, vender, Id)

            comandosSQL.append(sql1)
            print sql1
        
        db = mdb.connect(host=self.__host, port=self.__port, user=self.__usuario, passwd=self.__senha, db=self.__schema)               
            
        cursor = db.cursor()
        try:
            for i in comandosSQL:
                cursor.execute(i)
            db.commit()
            
            cursor.close()
            return True
        except mdb.Error, e:
            db.rollback()
            cursor.close()
            print "Error %d: %s" % (e.args[0], e.args[1])
            return False

    
    

    
    
    
    
        

if __name__ == "__main__":
    dao = ProdutoDao()
    print dao.pesquisarListaProdutos("PRO_NOME", "a")
    